import heapq
from typing import List


class Solution:
    def maxEvents(self, events: List[List[int]]) -> int:
        events.sort(key=lambda x: x[0])
        pq = [] # 优先队列存已经开始尚未结束的会议结束时间
        res, cur_day, i = 0, 1, 0
        n = len(events)
        while i < n or len(pq):
            
            # 存入已经开始的会议
            while i < n and events[i][0] == cur_day:
                heapq.heappush(pq, events[i][1])
                i += 1
            
            # 删除过期会议
            while len(pq) and pq[0] < cur_day:
                heapq.heappop(pq)
                
            # 每次选结束时间最早的会议，因为其他会议还有更多的时间可选择
            if len(pq):
                heapq.heappop(pq)
                res += 1
            cur_day += 1
        return res
